<?php
 
 
namespace D3hdv\HdvBundle\Controller;


use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use D3hdv\HdvBundle\Form\HdvLoginDiablo3Form;
use D3hdv\HdvBundle\Form\HdvCoffreVenteObjetDiablo3Form;
use D3hdv\HdvBundle\Form\HdvRechercheDiablo3ObjetForm;
use D3hdv\HdvBundle\Form\HdvInscriptionForm;
use D3hdv\HdvBundle\Form\HdvCompteModifierForm;

use D3hdv\Diablo3Bundle\Entity\D3Compte;
use D3hdv\Diablo3Bundle\Entity\D3Objet;
use D3hdv\Diablo3Bundle\Entity\D3ObjetModele;
use D3hdv\Diablo3Bundle\Entity\D3Coffre;
use D3hdv\Diablo3Bundle\Entity\D3CoffreD3Objet;
use D3hdv\Diablo3Bundle\Entity\D3Type;
use D3hdv\Diablo3Bundle\Entity\D3Classe;
use D3hdv\HdvBundle\Entity\HdvCompte;
use D3hdv\HdvBundle\Entity\HdvVente;
use D3hdv\HdvBundle\Entity\Role;
use D3hdv\HdvBundle\Entity\HdvNotification;
use Symfony\Component\HttpFoundation\RedirectResponse;

use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;

class HdvController extends Controller
{
  public function AccueilAction()
  {

	$user = $this->container->get('security.context')->getToken()->getUser();

        // Et pour vérifier que l'utilisateur est authentifié (et non un anonyme)
        if (!is_object($user))
        {
		return $this->render('D3hdvHdvBundle:Hdv:index.html.twig');
        }
	else
	{
		if( $user->GetDiablo3Compte() != null )
		{
			return $this->redirect($this->generateUrl('D3hdv_hdv_jeux_mes_ventes_objets'));
		}	
		else
		{
			return $this->redirect($this->generateUrl('D3hdv_hdv_login_diablo3'));
		}	
	   	return new Response("good");
        }



     //return $this->render('D3hdvHdvBundle:Hdv:index.html.twig');
  }

  public function CompteAction()
  {
     return $this->render('D3hdvHdvBundle:Hdv:compte.html.twig');
  }

  public function FaqAction()
  {
     return $this->render('D3hdvHdvBundle:Hdv:faq.html.twig');
  }

  public function ContactAction()
  {
     return $this->render('D3hdvHdvBundle:Hdv:contact.html.twig');
  }

  public function CompteModifierAction()
  {
	$form = $this->container->get('form.factory')->create(new HdvCompteModifierForm());
		
	return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:comptemodifier.html.twig', array(
		'form' => $form->createView(),
	
	));
  }

  public function CompteModifierCheckAction()
  {
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$form = $this->container->get('form.factory')->create(new HdvCompteModifierForm());
	 $request = $this->container->get('request');


	if($request->isXmlHttpRequest())
	{
		$em = $this->container->get('doctrine')->getEntityManager();
		
		$nouveauMail = $request->request->get('emailmodifie'); 
		$ancienMdp = $request->request->get('mdpancien');
		$nouveauMdp = $request->request->get('mdpnouveau');

		
		if($nouveauMail != '')
		{
			// On traite le nouveau mail
			$qb = $em->createQueryBuilder();
			$qb->select('e')
			->from('D3hdvHdvBundle:HdvCompte', 'e')
			->where("e.email = ?1")
			->setParameter(1, $nouveauMail);

			$query = $qb->getQuery();               
			$HdvCompteEmailCorrespondant = $query->getResult();

			if(!empty($HdvCompteEmailCorrespondant)) // pas de compte trouvé
			{
				echo $erreur="<font color='red'>Cet e-mail est déjà lié à un compte Hdv ! </font></br>";
				//echo
			}
			else
			{
				$HdvCompte->SetEmail($nouveauMail);
				echo $succes="<font color='green'>E-mail changé ! </font></br>";
				
			}
		}
		if($ancienMdp != '' && $nouveauMdp != '')
		{
		
			//Verification mot de passe
			$encoder = new MessageDigestPasswordEncoder('sha512', true, 10);
			$saltActuel=$HdvCompte->getSalt();
			//echo $encoder->encodePassword($ancienMdp,$saltActuel)."</br>";
			$qb = $em->createQueryBuilder();
			$qb->select('e')
			->from('D3hdvHdvBundle:HdvCompte', 'e')
			->where("e.password = ?1 and e.login = ?2 ")
			->setParameter(1, $encoder->encodePassword($ancienMdp,$saltActuel))
			->setParameter(2, $HdvCompte->GetUsername());

			$query = $qb->getQuery();               
			$HdvCompteMdpCorrespondant = $query->getResult();

			if(!empty($HdvCompteMdpCorrespondant)) 
			{
				
				$HdvCompte->setSalt(md5(time()));
		 
				// On crée un mot de passe (attention, comme vous pouvez le voir, il faut utiliser les même paramètres
				// que spécifiés dans le fichier security.ym, a sacoir SHA512 avec 10 itérations.        
			
				// On crée donc le mot de passe "test" à partir de l'encodage choisi au-dessus
				$password = $encoder->encodePassword($nouveauMdp, $HdvCompte->getSalt());
				// On applique le mot de passe à l'utilisateur
	
				$HdvCompte->setPassword($password);
				echo $succes="<font color='green'>Mot de passe changé !</font></br> ";
			}
			else
			{
				echo  $erreur="<font color='red'>L'ancien mot de passe ne correspond pas ! </font></br>";
			}

			
		}
		$em->persist($HdvCompte);
		$em->flush();
		return new Response("<font color='green'>Formulaire traité ... </font></br>");
		
	}

  }



  public function InscriptionAction($erreur=null)
  {
     $form = $this->container->get('form.factory')->create(new HdvInscriptionForm()); // changer form
	
	if( ! empty($erreur))
	{
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:inscriptionhdv.html.twig', array(
			'form' => $form->createView(),
			'erreur'=> $erreur
		
		));
	}
	else
	{
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:inscriptionhdv.html.twig', array(
			'form' => $form->createView(),
		
		));
	}
     //return $this->render('D3hdvHdvBundle:Hdv:inscription.html.twig');
  }

 public function InscriptionCheckAction()
  {
	$form = $this->container->get('form.factory')->create(new HdvInscriptionForm()); // changer form
	$request = $this->getRequest();

	if ($request->getMethod() == 'POST')
	{	
		$em = $this->container->get('doctrine')->getEntityManager();
		$form->bindRequest($request);
		$nomInscription= $form["nom"]->getData();
		$emailInscription=$form["email"]->getData();
		$mdpInscription= $form["mdp"]->getData();
		$mdpConfirmeInscription= $form["mdpconfirme"]->getData();
		//$mdpCacherInscription= $form["cacher"]->getData();

		$qb = $em->createQueryBuilder();

		$qb->select('c')
		->from('D3hdvHdvBundle:HdvCompte', 'c')
		->where("c.login = ?1")
		->setParameter(1, $nomInscription);

		$query = $qb->getQuery();               
		$HdvCompteCorrespondant = $query->getResult();

		if(!empty($HdvCompteCorrespondant)) // pas de compte trouvé
		{
			$erreur="Ce nom de compte est déjà utilisé ! ";
			return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:inscriptionhdv.html.twig', array(
			'form' => $form->createView(),
			'erreur' => $erreur				
			));
		}
		else
		{
			$qb = $em->createQueryBuilder();

			$qb->select('e')
			->from('D3hdvHdvBundle:HdvCompte', 'e')
			->where("e.email = ?1")
			->setParameter(1, $emailInscription);

			$query = $qb->getQuery();               
			$HdvCompteEmailCorrespondant = $query->getResult();
			if(!empty($HdvCompteEmailCorrespondant)) // pas de compte trouvé
			{
				$erreur="Cet e-mail est déjà lié à un compte Hdv ! ";
				return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:inscriptionhdv.html.twig', array(
				'form' => $form->createView(),
				'erreur' => $erreur				
				));
			}
			else
			{
				if($mdpInscription!=$mdpConfirmeInscription)
				{
					$erreur="Les mots de passe ne sont pas identiques ! ";
				return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:inscriptionhdv.html.twig', array(
				'form' => $form->createView(),
				'erreur' => $erreur				
				));
				}
				else
				{
					//$repository = $this->getContainer()->get('doctrine')->getEntityManager()->getRepository('D3hdvDiablo3Bundle:Role');
					$Roles_User_Hdv = $this->getDoctrine()->getEntityManager()->getRepository('D3hdvDiablo3Bundle:Role')->findByName("ROLE_USER");
					// On récupère l'entité correspondant à l'id $id
					//$Roles_User_Hdv = $repository->findByName("ROLE_USER");
					$HdvCompte = new HdvCompte();
					// On donne le login Admin à notre nouvel utilisateur
					$HdvCompte->setUsername($nomInscription);
					$HdvCompte->setEmail($emailInscription);
					// On cré un salt pour amélioré la sécurité
					$HdvCompte->setSalt(md5(time()));
					// On crée un mot de passe (attention, comme vous pouvez le voir, il faut utiliser les même paramètres
					// que spécifiés dans le fichier security.ym, a sacoir SHA512 avec 10 itérations.        
					$encoder = new MessageDigestPasswordEncoder('sha512', true, 10);
					// On crée donc le mot de passe "test" à partir de l'encodage choisi au-dessus
					$password = $encoder->encodePassword($mdpInscription, $HdvCompte->getSalt());
					// On applique le mot de passe à l'utilisateur

					$HdvCompte->setPassword($password);

					//$HdvCompte[$i]->getUserRoles()->add($role);
					foreach($Roles_User_Hdv as $j => $Role_User)
					{
						$HdvCompte->addUserRole($Role_User);
					}
					$em->persist($HdvCompte);
					// On déclenche l'neregistrement
					$em->flush();
			
					$succes="Inscription du compte ".$nomInscription." à l hotel des ventes D3 réussi !!";
					/*return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Security:login.html.twig', array(
					'succes' => $succes				
					));*/
					/*$response = $this->forward('D3hdvHdvBundle:Security:logincompte', array('succes' => $succes));
					return $response;*/
					return new RedirectResponse($this->generateUrl('_security_login', array('succes' => $succes)));
					//return new RedirectResponse($this->generateUrl('_security_login'));
				}
			}
		}
	}
  }




public function comptejeuxobjetsmesventeannulerAction($idvente)
{
	$em = $this->container->get('doctrine')->getEntityManager();
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$HdvCompteDiablo3Coffre =$HdvCompte->getDiablo3Compte()->getCoffre();
	$HdvCompteObjetsEnVente=$HdvCompte->getObjetsEnVente();
	$HdvVenteObjetVendu="";
	
	foreach($HdvCompteObjetsEnVente as $j => $HdvVente)  
	{
		if($HdvVente->GetId()==$idvente)
		{
			$HdvVenteObjetVendu=$HdvVente->GetD3Objet();
			

			$qb = $em->createQueryBuilder();
			$qb->select('v')
			->from('D3hdvDiablo3Bundle:D3CoffreD3Objet', 'v')
			->where("v.D3Coffre = ?1 and v.D3Objet= ?2")
			->setParameter(1,$HdvCompteDiablo3Coffre)
			->setParameter(2,$HdvVenteObjetVendu);

			$query = $qb->getQuery();               
			$D3ObjetD3Coffre = $query->getResult();	
			if(!empty($D3ObjetD3Coffre)) // Objet dans la table HdvVente donc déja vendu
			{
				foreach($D3ObjetD3Coffre as $o => $D3Objet)  
				{
					$D3Objet->SetEnVente(false);
					$em->persist($D3Objet);
					$em->flush();
				}
			}
			$HdvCompte->removeObjetsEnVente($HdvVente);
			
			$em->persist($HdvCompte);
			$em->flush();

			$em->remove($HdvVente);
			$em->flush();
			
		}
		
	}
	

	
        $this->get('session')->setFlash(
            'notice',
            'Vente de l objet '.$HdvVenteObjetVendu->GetObjetModele()->GetNom().' annulée'
        );

        return $this->redirect($this->generateUrl('D3hdv_hdv_jeux_coffre'));
	
		
}

  public function diablo3rechercheobjetAction()
  {
	$form = $this->container->get('form.factory')->create(new HdvRechercheDiablo3ObjetForm());
		

	return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:recherchediablo3objet.html.twig', array(
		'form' => $form->createView(),
	));
  }

 public function diablo3rechercheobjetcheckAction($page)
  {
	$form = $this->container->get('form.factory')->create(new HdvRechercheDiablo3ObjetForm());
	 $request = $this->container->get('request');


	if($request->isXmlHttpRequest())
	{
		$em = $this->container->get('doctrine')->getEntityManager();
		$nboption=0; //determinera le nombre d'option selectionnées
		$optionini=0; // determinera l'option en cours
		$options = array(); // tableau des options pour verifié si toutes respectées
		$somme=0;
		$nbobjets=0;
		$prixMoyen=array();
		$HdvVentecool= array(); // si condition remplis l'objets sera selectionné
		// Declaration des variables récuperants les valeurs selectionnée
		$nomobjet = '';
		$speobjet = 0;
		$niveau = 0;
		$type = 0;
		$classe= 0;
		$rarete=0;
		$caracteristiques='';
		$tri='';
		$prix=0;		
		$SuperRequete='';
		$caracvalider=0;
		$TriRequete='';		
		// Ajouter prix
		$nomobjet = $request->request->get('nom'); // recupére la valeur du champ objet
		$speobjet = $request->request->get('spe');
		$classe = $request->request->get('classe');
		$niveau = $request->request->get('niveau');
		$type = $request->request->get('type');
		$rarete = $request->request->get('rarete');
		$caracteristiques= $request->request->get('caracs');
		$tri= $request->request->get('tri');
		$prix= $request->request->get('prix');

		if($nomobjet != '')
		{
		  $SuperRequete=$SuperRequete.' and m.nom LIKE \'%'.$nomobjet.'%\'';
		}
		if($tri != '')
		{
		  //echo $tri."</br>";
		  if( $tri == 'p')
	          {
			$TriRequete='h.prix';
		  }
		  else
		  {
			$TriRequete='o.spe';
		  }
		  
		}
		else
		{
			$TriRequete='h.prix';
		}
		if($prix != 0)
		{
		  $SuperRequete=$SuperRequete.' and h.prix >='.$prix;	
		}
		if($speobjet != 0)
		{
		  $SuperRequete=$SuperRequete.' and o.spe >='.$speobjet;	
		}
		if($niveau != 0)
		{
		  $SuperRequete=$SuperRequete.' and m.niveau ='.$niveau;			  	
		}
		if($type != 0)
		{
		  $SuperRequete=$SuperRequete.' and t.id ='.$type;	
		}
		if($rarete != 0)
		{
		  $SuperRequete=$SuperRequete.' and r.id ='.$rarete;
		}

		if($classe != 0)
		{
		  $SuperRequete=$SuperRequete.' and c.id ='.$classe;	
		}
		if(!empty ($caracteristiques))
		{
			$nboption++;
		}

		$qb = $em->createQueryBuilder(); //save
		$qb->select('h')
		->from('D3hdvHdvBundle:HdvVente', 'h')
		->join('h.D3Objet', 'o')
		->leftJoin('o.ObjetModele','m')
		->leftJoin('m.Classe','c')
		->leftJoin('m.Rarete','r')
		->leftJoin('m.Type','t')
		->where('h.dateFin is null'.$SuperRequete) // ->where('h.CompteAcheteur is null'.$SuperRequete)
		->orderBy($TriRequete, 'DESC')
		;
		$query = $qb->getQuery();               
		$HdvVenteCorrespondantes = $query->getResult();
		
		$total_hdvventes    = count($HdvVenteCorrespondantes);
		$hdvventes_per_page = $this->container->getParameter('max_on_listepage');
		$last_page         = ceil($total_hdvventes / $hdvventes_per_page);
		$previous_page     = $page > 1 ? $page - 1 : 1;
		$next_page         = $page < $last_page ? $page + 1 : $last_page;

		$qb = $em->createQueryBuilder(); //save
		$qb->select('h')
		->from('D3hdvHdvBundle:HdvVente', 'h')
		->join('h.D3Objet', 'o')
		->leftJoin('o.ObjetModele','m')
		->leftJoin('m.Classe','c')
		->leftJoin('m.Rarete','r')
		->leftJoin('m.Type','t')
		->where('h.dateFin is null'.$SuperRequete) // ->where('h.CompteAcheteur is null'.$SuperRequete)
		->orderBy($TriRequete, 'DESC')
		;
		$query = $qb->setFirstResult(($page * $hdvventes_per_page) - $hdvventes_per_page)->setMaxResults($this->container->getParameter('max_on_listepage'))->getQuery();            
		$HdvVenteCorrespondantes = $query->getResult();
		
		if(!empty($HdvVenteCorrespondantes)) // Objet dans la table HdvVente donc déja vendu
		{
			foreach($HdvVenteCorrespondantes as $ml => $HdvVenteCorrespondante)  
			{
				if(!empty ($caracteristiques))
				{
					$HdvVenteCorrespondanteD3ObjetCaracs=$HdvVenteCorrespondante->GetD3Objet()->getCaracteristiques();
					$nbcarac=0;
					$caracvalide=0;
					foreach($caracteristiques as $c =>$caracteristique)  
					{
						$cc=0;
						//$caracvalide=0;
						foreach($HdvVenteCorrespondanteD3ObjetCaracs as $p =>$HdvVenteCorrespondanteD3ObjetCarac)  
						{
							/*echo "id carac=".$caracteristiques[$c][$cc+1];
							echo " Valeur carac=".$caracteristiques[$c][$cc]."</br>"*/;
							if($HdvVenteCorrespondanteD3ObjetCarac->GetObjetCaracteristique()->getId()==$caracteristiques[$c][$cc+1])
							{
								if($HdvVenteCorrespondanteD3ObjetCarac->GetValeurCara()>=$caracteristiques[$c][$cc])
								{
									$caracvalide++;	
								}
							}
							else
							{
								//echo "caracs pas trouvées dans les objets </br>";
							}
					
						}
						$nbcarac++;
					}
					//echo "caracvalide =".$caracvalide." nbcarac =".$nbcarac."</br>";
					if(($caracvalide==$nbcarac))
					{
						$caracvalider=1;
						
						
					}
					else
					{
						$caracvalider=0;
						/* modifications recente */
						//$total_hdvventes -- ;
						/* modifications recente */
					}			
				}
				else
				{
					$somme=0;
					$nbobjets=0;
					$HdvVentecool[$ml]=$HdvVenteCorrespondante;
					$qb = $em->createQueryBuilder();
					/*$qb->select('d')
					->from('D3hdvHdvBundle:HdvVente', 'd')
					->join('d.D3Objet', 'o') // modification gensky
					->where("d.idD3ObjetModele = ?1 and d.CompteAcheteur IS NOT NULL and d.prixCorrect = ?2 and o.spe > ?3")  // modification gensky
					->setParameter(1,$HdvVenteCorrespondante->GetIdD3ObjetModele())
					->setParameter(2,1)
					->setParameter(3,$HdvVenteCorrespondante->getD3Objet()->getSpeRatio()) // modification gensky
					;*/
					$qb->select('d')
					->from('D3hdvHdvBundle:HdvVente', 'd')
					->join('d.D3Objet', 'o') // modification gensky
					->where("d.idD3ObjetModele = ?1 and d.dateFin IS NOT NULL and d.prixCorrect = ?2 and o.spe > ?3")  // modification gensky
					->setParameter(1,$HdvVenteCorrespondante->GetIdD3ObjetModele())
					->setParameter(2,1)
					->setParameter(3,$HdvVenteCorrespondante->getD3Objet()->getSpeRatio()) // modification gensky
					;			
	
					$query = $qb->getQuery();               
					$HdvVenteD3ObjetModeleCorrespondants = $query->getResult();
					foreach($HdvVenteD3ObjetModeleCorrespondants as $j => $HdvVenteD3ObjetModeleCorrespondant)  
					{	
						//echo $HdvVenteD3ObjetModeleCorrespondant->getD3Objet()->GetSpe()."=> ".$HdvVenteD3ObjetModeleCorrespondant->getD3Objet()->getSpeRatio()."</br>";
						if( ($HdvVenteD3ObjetModeleCorrespondant->GetD3Objet()->getSpeRatio())<=(($HdvVenteCorrespondante->getD3Objet()->getSpeRatio())+0.15))
						{
							$somme+=$HdvVenteD3ObjetModeleCorrespondant->GetPrix();
							$nbobjets++;
						}	
					}
					if( $somme !=0)
					{
						$prixMoyen[$ml]=$somme/$nbobjets;
					}
					else
					{	
						$prixMoyen[$ml]=0;
					}
				}
				
				if(($caracvalider == 1) && (!empty ($caracteristiques)))
				{ 
					$somme=0;
					$nbobjets=0;
					$HdvVentecool[$ml]=$HdvVenteCorrespondante  ; 
			
					/*$qb = $em->createQueryBuilder();
					$qb->select('d')
					->from('D3hdvHdvBundle:HdvVente', 'd')
					->where("d.idD3ObjetModele = ?1 and d.CompteAcheteur IS NOT NULL and d.prixCorrect = ?2") 
					->setParameter(1,$HdvVenteCorrespondante->GetIdD3ObjetModele())
					->setParameter(2,1)
					;*/
					$qb = $em->createQueryBuilder();
					$qb->select('d')
					->from('D3hdvHdvBundle:HdvVente', 'd')
					->join('d.D3Objet', 'o') // modification gensky
					->where("d.idD3ObjetModele = ?1 and d.dateFin IS NOT NULL and d.prixCorrect = ?2 and o.spe > ?3")  // modification gensky
					->setParameter(1,$HdvVenteCorrespondante->GetIdD3ObjetModele())
					->setParameter(2,1)
					->setParameter(3,$HdvVenteCorrespondante->getD3Objet()->getSpeRatio()) // modification gensky
					;

					$query = $qb->getQuery();               
					$HdvVenteD3ObjetModeleCorrespondants = $query->getResult();
					foreach($HdvVenteD3ObjetModeleCorrespondants as $j => $HdvVenteD3ObjetModeleCorrespondant)  
					{
						//echo $HdvVenteD3ObjetModeleCorrespondant->getD3Objet()->GetSpe()."=> ".$HdvVenteD3ObjetModeleCorrespondant->getD3Objet()->getSpeRatio()."</br>";
						if( ($HdvVenteD3ObjetModeleCorrespondant->GetD3Objet()->getSpeRatio())<=(($HdvVenteCorrespondante->getD3Objet()->getSpeRatio())+0.15))
						{
							$somme+=$HdvVenteD3ObjetModeleCorrespondant->GetPrix();
							$nbobjets++;
						}	
					}
					if( $somme !=0)
					{
						$prixMoyen[$ml]=$somme/$nbobjets;
					}
					else
					{	
						$prixMoyen[$ml]=0;
					}
				}
				if(($caracvalider == 0) && (!empty ($caracteristiques))) 
				{
					//echo "Objet trouvé mais caractéristiques non valides !!"; 
				}				
			}
			/* modifications recente */
			/*$hdvventes_per_page = $this->container->getParameter('max_on_listepage');
			$last_page         = ceil($total_hdvventes / $hdvventes_per_page);
			$previous_page     = $page > 1 ? $page - 1 : 1;
			$next_page         = $page < $last_page ? $page + 1 : $last_page;*/
			/* modifications recente */	

			return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:test.html.twig', array(
			'HdvObjetEnVenteCorrespondantId' =>$HdvVentecool,
			'PrixMoyenRecherche'=> $prixMoyen,
		    'last_page' => $last_page,
		    'previous_page' => $previous_page,
		    'current_page' => $page,
		    'next_page' => $next_page,
		    'total_hdventes' => $total_hdvventes,
				
			));
		}
		else
		{
			return new Response("Pas d'objet trouvé !!");
		}
		
	}
	return new Response("Pas de requete sql");
  }


public function diablo3recherchetypeAction()
{
	$form = $this->container->get('form.factory')->create(new HdvRechercheDiablo3ObjetForm());
	$request = $this->container->get('request');

	if ($request->isXmlHttpRequest())
	{
		$myValue = $request->request->get('Type');	
		$em = $this->container->get('doctrine')->getEntityManager();
		if($myValue==1)
		{
			$message = "1 main";
			$qb = $em->createQueryBuilder();

			$qb->select('D')
			->from('D3hdvDiablo3Bundle:D3ObjetClasse', 'D')
			->where("D.main >= 1");

			$query = $qb->getQuery();               
			$Classe = $query->getResult();
			$serializedEntity = $this->container->get('serializer')->serialize($Classe, 'json');			
			return new Response($serializedEntity);
		}	  
		else
		{	
			$message  = "2 mains";
			$qb = $em->createQueryBuilder();
			$qb->select('d')
			->from('D3hdvDiablo3Bundle:D3ObjetClasse', 'd')
			->where("d.main = ?1 ")
			->setParameter(1, 0);
			$query = $qb->getQuery();               
			$Classe = $query->getResult();
			$serializedEntity = $this->container->get('serializer')->serialize($Classe, 'json');
			return new Response($serializedEntity);
		}
			$serializedEntity = $this->container->get('serializer')->serialize($Classe, 'json');
			return new Response($serializedEntity);
	}

}

 public function envoiNotification($HdvCompte,$titre,$message)
  {
	$em = $this->container->get('doctrine')->getEntityManager();
	$HdvNotifcation = new HdvNotification();
	$HdvNotifcation->setTitre($titre);
	$HdvNotifcation->setMessage($message);
	$HdvCompte->addNotification($HdvNotifcation);
	$em->persist($HdvNotifcation);
	$em->persist($HdvCompte);	
	$em->flush();
  }


public function lunotificationAction()
{
	$request = $this->container->get('request');
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$HdvCompteNotificationsNonLu= array();

	if($request->isXmlHttpRequest())
	{
		$em = $this->container->get('doctrine')->getEntityManager();
		$HdvCompteNotificationsLu="";
		$idnotification = $request->request->get('id');
		foreach($HdvCompte->getNotification() as $HdvCompteNotification)  
		{	
			if($HdvCompteNotification->GetId()==$idnotification)
			{
				$HdvCompteNotificationsLu=$HdvCompteNotification;
			}
		}
		$HdvCompteNotificationsLu->SetLu(true);	
		$em->persist($HdvCompteNotificationsLu);
		$em->flush();
		$i=0;
		foreach($HdvCompte->getNotification() as $HdvCompteNotification)  
		{	
			if($HdvCompteNotification->GetLu()==false)
			{
				$HdvCompteNotificationsNonLu[$i]=$HdvCompteNotification;
			}
			$i++;
		}
	
		//return new Response($HdvCompte->getNotification());
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:menunotificationhdv.html.twig', array(
			'HdvCompteNotifications' => $HdvCompteNotificationsNonLu,

		));
	}
}


public function voirNotificationAction()
{
	$request = $this->container->get('request');
	if($request->isXmlHttpRequest())
	{
		$em = $this->container->get('doctrine')->getEntityManager();
		$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
		$HdvCompteNotifications=$HdvCompte->getNotification();
		$HdvCompteNotificationsNonLu= array();
		if(!empty($HdvCompteNotifications))
		{
			$i=0;
			foreach($HdvCompteNotifications as $HdvCompteNotification)  
			{	
				if($HdvCompteNotification->GetLu()==false)
				{
					$HdvCompteNotificationsNonLu[$i]=$HdvCompteNotification;
				}
				$i++;
			}
		}
		// ajouter foreach verifiant si lu ou non
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:menunotificationhdv.html.twig', array(
				'HdvCompteNotifications' => $HdvCompteNotificationsNonLu,

			));
	}
	else
	{
		$em = $this->container->get('doctrine')->getEntityManager();
		$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
		$HdvCompteNotifications=$HdvCompte->getNotification();
		$HdvCompteNotificationsNonLu= array();
		if(!empty($HdvCompteNotifications))
		{
			$i=0;
			foreach($HdvCompteNotifications as $HdvCompteNotification)  
			{	
				if($HdvCompteNotification->GetLu()==false)
				{
					$HdvCompteNotificationsNonLu[$i]=$HdvCompteNotification;
				}
				$i++;
			}
		}
		// ajouter foreach verifiant si lu ou non
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:menunotificationhdv.html.twig', array(
				'HdvCompteNotifications' => $HdvCompteNotificationsNonLu,

			));



	}
}

public function comptejeuxobjetsmesachatAction($hdvachats_page = null)
  {
	$em = $this->container->get('doctrine')->getEntityManager();
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	//$HdvCompteDiablo3Coffre =$HdvCompte->getDiablo3Compte()->getCoffre();
	$qb = $em->createQueryBuilder();
	$qb->select('d')
	->from('D3hdvHdvBundle:HdvVente', 'd') // revoir requete probleme on selectionne tout les ventes :s
	->where("d.CompteAcheteur = ".$HdvCompte->GetId())
	;

	$query = $qb->getQuery();               
	$HdvAchats = $query->getResult();
	$total_hdvachats    = count($HdvAchats);
	$hdvachats_per_page = $this->container->getParameter('max_on_listepage');
	$hdvachats_last_page         = ceil($total_hdvachats / $hdvachats_per_page);
	$hdvachats_previous_page     = $hdvachats_page > 1 ? $hdvachats_page - 1 : 1;
	$hdvachats_next_page         = $hdvachats_page < $hdvachats_last_page ? $hdvachats_page + 1 : $hdvachats_last_page;
	

	$qb = $em->createQueryBuilder();
	$qb->select('d')
	->from('D3hdvHdvBundle:HdvVente', 'd') // revoir requete probleme on selectionne tout les ventes :s
	->where("d.CompteAcheteur = ".$HdvCompte->GetId())
	;
	$query = $qb->setFirstResult(($hdvachats_page * $hdvachats_per_page) - $hdvachats_per_page)->setMaxResults($this->container->getParameter('max_on_listepage'))->getQuery();                
	$HdvAchats = $query->getResult();

	if(!empty($HdvAchats)) // Objet dans la table HdvVente donc déja vendu
	{	
		return $this->render('D3hdvHdvBundle:Hdv:comptejeuxdiablo3mesachats.html.twig', array(
		    'HdvAchats'	=> $HdvAchats,
		    'hdvachats_last_page' => $hdvachats_last_page,
		    'hdvachats_previous_page' => $hdvachats_previous_page,
		    'hdvachats_current_page' => $hdvachats_page,
		    'hdvachats_next_page' => $hdvachats_next_page,
		    'hdvachats_total_hdventes' => $total_hdvachats,
		));
	}

		return $this->render('D3hdvHdvBundle:Hdv:comptejeuxdiablo3mesachats.html.twig', array(
		    'HdvAchats'	=> $HdvAchats,
		    'hdvachats_last_page' => $hdvachats_last_page,
		    'hdvachats_previous_page' => $hdvachats_previous_page,
		    'hdvachats_current_page' => $hdvachats_page,
		    'hdvachats_next_page' => $hdvachats_next_page,
		    'hdvachats_total_hdventes' => $total_hdvachats,
		));
	
  }


public function comptejeuxobjetsmesventeAction($page,$hdvachats_page = null)
  {
	$em = $this->container->get('doctrine')->getEntityManager();
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	//$HdvCompteDiablo3Coffre =$HdvCompte->getDiablo3Compte()->getCoffre();
	$qb = $em->createQueryBuilder();
	$qb->select('d')
	->from('D3hdvHdvBundle:HdvVente', 'd') // revoir requete probleme on selectionne tout les ventes :s
	->where("d.idCompteVendeur = ".$HdvCompte->GetId())
	;

	$query = $qb->getQuery();               
	$HdvVentes = $query->getResult();
	$total_hdvventes    = count($HdvVentes);
	$hdvventes_per_page = $this->container->getParameter('max_on_listepage');
	$last_page         = ceil($total_hdvventes / $hdvventes_per_page);
	$previous_page     = $page > 1 ? $page - 1 : 1;
	$next_page         = $page < $last_page ? $page + 1 : $last_page;
	

	$qb = $em->createQueryBuilder();
	$qb->select('d')
	->from('D3hdvHdvBundle:HdvVente', 'd') // revoir requete probleme on selectionne tout les ventes :s
	->where("d.idCompteVendeur = ".$HdvCompte->GetId())
	;
	$query = $qb->setFirstResult(($page * $hdvventes_per_page) - $hdvventes_per_page)->setMaxResults($this->container->getParameter('max_on_listepage'))->getQuery();                
	$HdvVentes = $query->getResult();

	if(!empty($HdvVentes)) // Objet dans la table HdvVente donc déja vendu
	{	

		return $this->render('D3hdvHdvBundle:Hdv:comptejeuxdiablo3mesventes.html.twig', array(
		    'HdvVentes'	=> $HdvVentes,
		    'last_page' => $last_page,
		    'previous_page' => $previous_page,
		    'current_page' => $page,
		    'next_page' => $next_page,
		    'total_hdventes' => $total_hdvventes,
			'hdvachats_page' => $hdvachats_page
		));
	}

		return $this->render('D3hdvHdvBundle:Hdv:comptejeuxdiablo3mesventes.html.twig', array(
		    'HdvVentes'	=> $HdvVentes,
		    'last_page' => $last_page,
		    'previous_page' => $previous_page,
		    'current_page' => $page,
		    'next_page' => $next_page,
		    'total_hdventes' => $total_hdvventes,
			'hdvachats_page' => $hdvachats_page
		));
	
  }
  
  public function diablo3rechercheachatobjetAction()
  {
		
	$request = $this->container->get('request');
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser(); 

	if($request->isXmlHttpRequest())
	    {
		$em = $this->container->get('doctrine')->getEntityManager();

		$idvente = $request->request->get('id');
		
		$qb = $em->createQueryBuilder();

		$qb->select('d')
		->from('D3hdvHdvBundle:HdvVente', 'd')
		->where('d.id = ?2')
		->setParameter(2, $idvente);

		$query = $qb->getQuery();               
		$HdvCorrespondants = $query->getResult();
	
		if(($HdvCorrespondants[0]->GetIdCompteVendeur())==$HdvCompte->GetId())
		{
			$erreur="Erreur : Vous ne pouvez pas acheter votre propre Objet mis en vente !!";
			return new Response($erreur);
		}
		if(($HdvCompte->GetDiablo3Compte()->GetCoffre()->GetPieceOr())<$HdvCorrespondants[0]->GetPrix())
		{
			$erreur="Erreur : Je crains que vous ne puissez vous offrir cet objet verifiez votre or !!";
			return new Response($erreur);
		}

		// ajouter securité pas assez d'or


		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:achatrecherchediablo3objet.html.twig', array(
			'HdvCorrespondants' => $HdvCorrespondants,

		));
	    }
  }

  public function diablo3rechercheachatobjetcheckAction()
  {
	$em = $this->container->get('doctrine')->getEntityManager();
	$request = $this->container->get('request');
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$HdvComptes = $em->getRepository('D3hdvHdvBundle:HdvCompte')->findAll();

	foreach($HdvComptes as $ml => $HdvCompteadmin)  
	{
		foreach($HdvCompteadmin->getRoles() as $Role)  
		{
			//echo "Role = ".$Role->GetName();
			if($Role->GetName() == "ROLE_ADMIN")
			{
				$HdvAdminCompte=$HdvCompteadmin;
				break;
			}
		}
		
	}
	
	//return new Response("hey".$HdvAdminCompte->GetUsername());

	if($request->isXmlHttpRequest())
	{
		$idvente = $request->request->get('id');
		
		$qb = $em->createQueryBuilder();

		$qb->select('d')
		->from('D3hdvHdvBundle:HdvVente', 'd')
		->where('d.id = ?2')
		->setParameter(2, $idvente);

		$query = $qb->getQuery();               
		$HdvVente = $query->getResult();
		
		$HdvVentePrix=$HdvVente[0]->GetPrix(); // prix de l'objet en vente
		$HdvVenteD3Objet=$HdvVente[0]->GetD3Objet(); // objet en vente
		$HdvVenteCompteVendeurId=$HdvVente[0]->GetIdCompteVendeur(); // id compte vendeur
		
		$qb = $em->createQueryBuilder();
		$qb->select('c')
		->from('D3hdvHdvBundle:HdvCompte', 'c')
		->where('c.id = ?2')
		->setParameter(2, $HdvVenteCompteVendeurId);
		$query = $qb->getQuery();               
		$HdvCompteVendeur = $query->getResult();

		// On recupere le coffre de l'admin et ses pieces d'or
		$HdvAdminCompteCoffre=$HdvAdminCompte->GetDiablo3Compte()->GetCoffre();
		$HdvAdminCompteCoffrePiece=$HdvAdminCompteCoffre->getPieceOr();


		// On recupere le coffre du vendeur et ses pieces d'or
		$HdvCompteVendeurCoffre= $HdvCompteVendeur[0]->GetDiablo3Compte()->GetCoffre();
		$HdvCompteVendeurCoffrePiece=$HdvCompteVendeurCoffre->getPieceOr();

		// On recupere le coffre de l'acheteur et ses pieces d'or
		$HdvCompteAcheteurCoffre=$HdvCompte->GetDiablo3Compte()->GetCoffre();
		$HdvCompteAcheteurCoffrePiece=$HdvCompteAcheteurCoffre->getPieceOr();
		
		
		// on credit la somme de l'objet vendu sur le compte de l'acheteur 
		
		$HdvCompteAcheteurCoffre->setPieceOr($HdvCompteAcheteurCoffrePiece-$HdvVentePrix);
		$em->persist($HdvCompteAcheteurCoffre);
		
		$SommeHdvAdmin=($HdvVentePrix*3)/100;
		$HdvAdminCompteCoffre->setPieceOr($HdvAdminCompteCoffrePiece+$SommeHdvAdmin);
		$em->persist($HdvAdminCompteCoffre);
		
		$SommeHdvVendeur=$HdvVentePrix-$SommeHdvAdmin;
		// on debite cette somme sur le compte du vendeur

		$HdvCompteVendeurCoffre->setPieceOr($HdvCompteVendeurCoffrePiece+$SommeHdvVendeur);
		$em->persist($HdvCompteVendeurCoffre);

		// on sort l'objet du coffre du vendeur vers celui de l'acheteur

		
		$qb = $em->createQueryBuilder();
		$qb->select('o')
		  ->from('D3hdvDiablo3Bundle:D3CoffreD3Objet', 'o')
		  ->where("o.D3Coffre = ?1 and o.enVente = ?2 and o.D3Objet = ?3")
		  ->setParameter(1, $HdvCompteVendeurCoffre)
		  ->setParameter(2,1)
		  ->setParameter(3,$HdvVenteD3Objet);

	       $query = $qb->getQuery();               
	       $coffreD3ObjetsVendeur = $query->getResult();
	       $coffreD3ObjetsVendeur[0]->SetD3Coffre($HdvCompteAcheteurCoffre);
	       $coffreD3ObjetsVendeur[0]->SetEnVente(false);
	       $em->persist($coffreD3ObjetsVendeur[0]);
				
	       // on assigne l'attribut CompteAcheteur de la table HdVente avec l'entitée de l'acheteur
	       $HdvVente[0]->SetCompteAcheteur($HdvCompte);
	       // on assigne l'attribut dateFin 
	       $HdvVente[0]->SetDateFin(new \Datetime());
	       $em->persist($HdvVente[0]);

	       //$em->flush();

		$this->envoiNotification($HdvCompteVendeur[0],"Notification Vente d'objet","Vous venez de vendre l'objet ".$HdvVenteD3Objet->getObjetModele()->getNom()." pour ".$SommeHdvVendeur." piéces d'or !!");

	       /*$succes2='Felicitation vous avez acheter l\'Objet '.$HdvVenteD3Objet->getObjetModele()->getNom() .' voir dans votre coffre ';
	       return new Response($succes2);	*/
		$status=1;
		$response = new Response(json_encode(array('status' => $status,'objet' => $HdvVenteD3Objet->getObjetModele()->getNom() )));
		$response->headers->set('Content-Type', 'application/json');
		return $response;
		
	}
  }


  public function comptejeuxcoffreobjetventeAction()
  {
	 $request = $this->container->get('request');
	 $HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	 /*if(count($HdvCompte->getObjetsEnVente())>5)
	{
		return new Response("Erreur : Vous ne pouvez vendre que 5 objets en meme temps");
	}*/
		$cmp=0;
	foreach($HdvCompte->getObjetsEnVente() as $ml => $HdvCompteVente)  
	{
		if(is_null($HdvCompteVente->GetDateFin()))
		{
			$cmp++;
		}
	}
	if($cmp>5) return new Response("Erreur : Vous ne pouvez vendre que 5 objets en même temps");
	

    if($request->isXmlHttpRequest())
    {

	$nomobjet = '';
        $idobjet = $request->request->get('id');
	$form = $this->container->get('form.factory')->create(new HdvCoffreVenteObjetDiablo3Form($idobjet));

	return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:ventecoffreobjetdiablo3.html.twig', array(
		'form' => $form->createView(),
		'idobjet' => $idobjet
	
	));
    }
  }

  public function ObjetCheckPrixCorrect($prixVendeur,$objet,$check)
  {
	$em = $this->container->get('doctrine')->getEntityManager();
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$prixMoyen=0;
	$prixCorrect=0;
	$trancheprixrarete="";
	$somme=0;
	$nbobjets=0;
	$premierevente=0;

	$qb = $em->createQueryBuilder();

	$qb->select('d')
	->from('D3hdvDiablo3Bundle:D3Objet', 'd')
	->where("d.id = ?1 ")
	->setParameter(1, $objet);

	$query = $qb->getQuery();               
	$D3ObjetCorrespondant = $query->getResult();


	if(!empty($D3ObjetCorrespondant)) // l'objet existe donc on p le vendre
	{	
		foreach($D3ObjetCorrespondant as $j => $D3Objet)  
		{
		$MonObjet=$D3Objet;
		$d3ObjetEnVenteRatioSpe=number_format($D3Objet->getSpeRatio(), 3, '.', '');
		$d3ObjetEnVenteModeleId=$D3Objet->getObjetModele()->getId();
		$d3ObjetEnVenteRareteId=$D3Objet->getObjetModele()->getRarete()->getId();
		$d3ObjetEnVenteRareteNom=$D3Objet->getObjetModele()->getRarete()->getObjetRarete();

		}
		$qb = $em->createQueryBuilder();

		$qb->select('d')
		->from('D3hdvHdvBundle:HdvVente', 'd')
		->where('d.idD3ObjetModele = ?2')
		->setParameter(2, $d3ObjetEnVenteModeleId);

		$query = $qb->getQuery();               
		$HdvCorrespondants = $query->getResult();

		if(!empty($HdvCorrespondants)) // Objet dans la table HdvVente donc déja vendu
		{	$premierevente=0;

			foreach($HdvCorrespondants as $j => $HdvCorrespondance)  
			{
				//if($HdvCorrespondance->getCompteAcheteur() != null) // Acheteur pas à null donc historique des ventes
				if($HdvCorrespondance->getDateFin() != null)
				{
					if($HdvCorrespondance->getPrixCorrect()==1) // Objet a un prix correct donc on va utiliser ses donnéess
					{
						$HdvCorreObjetSpeRatio=$HdvCorrespondance->getD3Objet()->GetSpeRatio();
						if(( $HdvCorreObjetSpeRatio >= $d3ObjetEnVenteRatioSpe-0.15) && ($HdvCorreObjetSpeRatio <= $d3ObjetEnVenteRatioSpe+0.15 )) // 0.10 à la base à voir
						{
							$somme+=$HdvCorrespondance->GetPrix();
							$nbobjets++;
						}	
					}
				}
			}
			if( $somme !=0)
			{
			$prixMoyen=$somme/$nbobjets;
			}

		}
		/*else // Objet pas dans la table HdvVente donc jamais vendu
		{
		//echo "Arme pas vendu</br>";
		}*/

		if($prixMoyen!=0) // Objet dans la table HdvVente donc déja vendu
		{
			if(($prixVendeur<=$prixMoyen*1.20) && ($prixVendeur>=$prixMoyen*0.75))
			{	
				$prixCorrect=1;	
			}
			else
			{
				$prixCorrect=0;	
			}	
		}
		else // Objet pas dans la table HdvVente donc jamais vendu
		{
			$premierevente=1;
			switch ($d3ObjetEnVenteRareteId) {
			case 1: //Rarete Inferieur
				if(($prixVendeur<=10000*1.25) && ($prixVendeur>=10000*0.10))
				{
					$prixCorrect=1;
					$prixMoyen=$prixVendeur/**$d3ObjetEnVenteRatioSpe*/;
				}
				else
				{	$prixMoyen=$prixVendeur;
					$prixCorrect=0;
					$trancheprixrarete=(10000*0.10)."-".(10000*1.25);
				}
			break;
			case 2: //Rarete Normal
				if(($prixVendeur<=90000*1.25) && ($prixVendeur>=90000*0.03))
				{
					$prixCorrect=1;
					$prixMoyen=$prixVendeur/**$d3ObjetEnVenteRatioSpe*/;	

				}
				else
				{	$prixMoyen=$prixVendeur;
					$prixCorrect=0;
					$trancheprixrarete=(90000*0.03)."-".(90000*1.25);
				}
			break;
			case 3: //Rarete Superieur
				if(($prixVendeur<=300000*1.25) && ($prixVendeur>=300000*0.05))
				{
				$prixCorrect=1;
				$prixMoyen=$prixVendeur/**$d3ObjetEnVenteRatioSpe*/;

				}
				else
				{	$prixMoyen=$prixVendeur;
				$prixCorrect=0;
				$trancheprixrarete=(300000*0.05)."-".(300000*1.25);
				}
			break;
			case 4: //Rarete Magique
				if(($prixVendeur<=1000000*2) && ($prixVendeur>=1000000*0.10))
				{
					$prixCorrect=1;
					$prixMoyen=$prixVendeur/**$d3ObjetEnVenteRatioSpe*/;

				}
				else
				{	$prixMoyen=$prixVendeur;
					$prixCorrect=0;
					$trancheprixrarete=(1000000*0.10)."-".(1000000*2);
				}
			break;
			case 5: //Rarete Legendaire
				if(($prixVendeur<=3000000*8) && ($prixVendeur>=3000000*0.05))
				{
					$prixCorrect=1;
					$prixMoyen=$prixVendeur/**$d3ObjetEnVenteRatioSpe*/;
				}
				else
				{
					$prixCorrect=0;
					$prixMoyen=$prixVendeur;
					$trancheprixrarete=(3000000*0.05)."-".(3000000*8);
				}
			break;
			}
	}
	if($check==1)
	{
		if($prixCorrect==0)
		{
			if($premierevente==1)
			{
				$erreur="<font color='red'> Prix Incorrect : </font> \n Le prix de vente (".$prixVendeur.") de votre objet est incorrect </br> il n'est pas compris dans la tranche ".$trancheprixrarete." en rapport avec la rareté ".$d3ObjetEnVenteRareteNom." ! " ;
			
				return $erreur;	
				//return 1;
			}
			else
			{
				$erreur="<font color='red'> Prix Incorrect : </font>\n Le prix de vente (".$prixVendeur.") de votre objet est incorrect </br> par rapport au prix de vente moyen de cet objet ".$prixMoyen." !" ;
				
				return $erreur;	
				//return 2;
			}				
		}
		else
		{	
			if($premierevente==1)
			{
				$succes="<font color='green'> Prix Correct : </font>\n Le prix de vente (".$prixVendeur.") de votre objet est correct !" ;
				return $succes;
				//return 3;
				
			}	
			else
			{
				$succes="<font color='green'> Prix Correct : </font>\n Le prix de vente (".$prixVendeur.") de votre objet est correct !" ;
				return $succes;
				//return 4;
			}
		}       
	}
	
	else
	{
		$HdvVEnte= new HdvVente;
		$HdvVEnte->setTypePaiement(0);
		$HdvVEnte->setPrix($prixVendeur);				
		$HdvVEnte->setQte(1);				
		$HdvVEnte->setPrixCorrect($prixCorrect);
		$HdvVEnte->setD3Objet($MonObjet);
		$HdvVEnte->setIdD3ObjetModele($d3ObjetEnVenteModeleId);
		$HdvVEnte->setIdCompteVendeur($HdvCompte->GetId());
	

		$em->persist($HdvVEnte);
		$em->flush();

		$HdvCompte->addObjetsEnVente($HdvVEnte);
		$em->persist($HdvCompte);
		$em->flush();

		$qb = $em->createQueryBuilder();
		$qb->select('d')
		  ->from('D3hdvDiablo3Bundle:D3CoffreD3Objet', 'd')
		  ->where("d.D3Coffre = ?1 and d.enVente = ?2 and d.D3Objet = ?3")
		  ->setParameter(1, $HdvCompte->getDiablo3Compte()->getCoffre())
		  ->setParameter(2,0)
		  ->setParameter(3,$MonObjet);

	       $query = $qb->getQuery();               
	       $coffreD3Objets = $query->getResult();
	       $coffreD3Objets[0]->setEnVente(true);
	       $em->persist($coffreD3Objets[0]);
	       $em->flush();

		$status=1;
		$response = new Response(json_encode(array('status' => $status,'objet' => $MonObjet->getObjetModele()->getNom() )));
		$response->headers->set('Content-Type', 'application/json');
		return $response;
				
	}
	}
	
  }
  
  public function CompteJeuxCoffreObjetVenteCheckPrixAction($idobjet) // check le prix en direct à chaque chiffre rajouté dans le formulaire de vente
  {
	$form = $this->container->get('form.factory')->create(new HdvCoffreVenteObjetDiablo3Form($idobjet));
	$request = $this->getRequest();
	if($request->isXmlHttpRequest())
    	{
		$objet = $request->request->get('objet');
		$prixVendeur = $request->request->get('prix');
		$reponseCheck=$this->ObjetCheckPrixCorrect($prixVendeur,$objet,1);
		return new Response($reponseCheck);
	}
	else
	{
		return new Response("Erreur: Pas de Requete ajax ??");
	}
  }


  public function CompteJeuxCoffreObjetVenteCheckAction($idobjet) // check le prix et mise en vente de l'objet lors de la confirmation du formulaire
  {
	$form = $this->container->get('form.factory')->create(new HdvCoffreVenteObjetDiablo3Form($idobjet));
	$request = $this->getRequest();
	
	if($request->isXmlHttpRequest())
    	{
		$objet = $request->request->get('objet');
		$prixVendeur = $request->request->get('prix');
		$reponseCheck=$this->ObjetCheckPrixCorrect($prixVendeur,$objet,0);
		return $reponseCheck;
	}
	else
	{
		return new Response("Erreur: Pas de Requete ajax ??");
	}
	
  }

  public function DeassocieDiablo3Action()
  {
	$em = $this->container->get('doctrine')->getEntityManager();
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$D3CompteName=$HdvCompte->getDiablo3Compte()->getUsername();


	$HdvCompteDiablo3Coffre =$HdvCompte->getDiablo3Compte()->getCoffre();
	$HdvCompteObjetsEnVente=$HdvCompte->getObjetsEnVente();
	$HdvVenteObjetVendu="";
	
	foreach($HdvCompteObjetsEnVente as $j => $HdvVente)  
	{
			$HdvVenteObjetVendu=$HdvVente->GetD3Objet();
			$HdvVenteObjetVenduDateFin=$HdvVente->getDateFin();
			if(is_null($HdvVenteObjetVenduDateFin))
			{
				$qb = $em->createQueryBuilder();
				$qb->select('v')
				->from('D3hdvDiablo3Bundle:D3CoffreD3Objet', 'v')
				->where("v.D3Coffre = ?1 and v.D3Objet= ?2")
				->setParameter(1,$HdvCompteDiablo3Coffre)
				->setParameter(2,$HdvVenteObjetVendu);

				$query = $qb->getQuery();               
				$D3ObjetD3Coffre = $query->getResult();	
				if(!empty($D3ObjetD3Coffre)) // Objet dans la table HdvVente donc déja vendu
				{
					foreach($D3ObjetD3Coffre as $o => $D3Objet)  
					{
						$D3Objet->SetEnVente(false);
						$em->persist($D3Objet);
						$em->flush();
					}
				}
				$HdvCompte->removeObjetsEnVente($HdvVente);
			
				$em->persist($HdvCompte);
				$em->flush();

				$em->remove($HdvVente);
				$em->flush();
			}
					
	}

	$HdvCompte->removeDiablo3Compte();

	$em->persist($HdvCompte);
	$em->flush();

	$form = $this->container->get('form.factory')->create(new HdvLoginDiablo3Form());

	$succes="Détachement du Compte Diablo 3 ".$D3CompteName." au Compte Hôtel des ventes ".$HdvCompte->getLogin()."  réussi";
	return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
	'succes' => $succes, 'form' => $form->createView()				
	));
  }

  public function CompteJeuxCoffreAction($page)
  {
	$em = $this->getDoctrine()->getEntityManager();
	$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	$D3Compte=$HdvCompte->getDiablo3Compte();
	$coffreD3=$D3Compte->getCoffre();
	$qb = $em->createQueryBuilder();
	$qb->select('d')
	  ->from('D3hdvDiablo3Bundle:D3CoffreD3Objet', 'd')
	  ->where("d.D3Coffre = ?1 and d.enVente = ?2")
	  ->setParameter(1, $coffreD3)
	  ->setParameter(2,0);
       $query = $qb->getQuery();           
       $coffreD3Objets = $query->getResult();

	$total_objet    = count($coffreD3Objets);
	$objet_per_page = $this->container->getParameter('max_on_listepage');
	$last_page         = ceil($total_objet / $objet_per_page);
	$previous_page     = $page > 1 ? $page - 1 : 1;
	$next_page         = $page < $last_page ? $page + 1 : $last_page;


        $qb = $em->createQueryBuilder();
	$qb->select('d')
	  ->from('D3hdvDiablo3Bundle:D3CoffreD3Objet', 'd')
	  ->where("d.D3Coffre = ?1 and d.enVente = ?2")
	  ->setParameter(1, $coffreD3)
	  ->setParameter(2,0);
       $query = $qb->setFirstResult(($page * $objet_per_page) - $objet_per_page)->setMaxResults($this->container->getParameter('max_on_listepage'))->getQuery();                     
       $coffreD3Objets = $query->getResult();

	return $this->render('D3hdvHdvBundle:Hdv:comptejeuxdiablo3coffre.html.twig', array(
	    'D3Coffre'      => $coffreD3,
	    'D3Objets'	    => $coffreD3Objets,
	    'D3Compte'       => $D3Compte,
	    'last_page' => $last_page,
	    'previous_page' => $previous_page,
	    'current_page' => $page,
	    'next_page' => $next_page,
	    'total_objet' => $total_objet,
	));
  }
  
  public function MenuCompteJeuxAction()
  {
	    $HdvCompte = $this->container->get('security.context')->getToken()->getUser();
	    $diablo3_compte = $HdvCompte->getDiablo3Compte();
	
	    if( ! empty($diablo3_compte))
	    {
		   return $this->render('D3hdvHdvBundle:Hdv:menuhdvcomptejeux.html.twig', array(
			'compte' => $diablo3_compte
		    ));
	    }
	    else
	    {
		return new Response("Pas encore de jeu associé");
	    }
   }

  public function LoginDiablo3Action($erreur= null)
  {
	$form = $this->container->get('form.factory')->create(new HdvLoginDiablo3Form());
	
	if( ! empty($erreur))
	{
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
			'form' => $form->createView(),
			'erreur'=> $erreur
		
		));
	}
	else
	{
		return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
			'form' => $form->createView(),
		
		));
	}
  }

  public function LoginDiablo3CheckAction()
  {
	$form = $this->container->get('form.factory')->create(new HdvLoginDiablo3Form());
	$request = $this->getRequest();

	if ($request->getMethod() == 'POST')
	{	

		$em = $this->container->get('doctrine')->getEntityManager();
		$form->bindRequest($request);
		$nomD3compte= $form["nom"]->getData();
		$mdpD3compte= $form["mdp"]->getData();

		$qb = $em->createQueryBuilder();

		$qb->select('D')
		->from('D3hdvDiablo3Bundle:D3Compte', 'D')
		->where("D.login = ?1")
		->setParameter(1, $nomD3compte);

		$query = $qb->getQuery();               
		$D3CompteCorrespondant = $query->getResult();
		if(!empty($D3CompteCorrespondant)) // pas de compte trouvé
		{
			foreach($D3CompteCorrespondant as $j => $D3Compte)  
			{
				$encoder = new MessageDigestPasswordEncoder('sha512', true, 10);
				$mdpEncodeD3Compte = $encoder->encodePassword($mdpD3compte, $D3Compte->getSalt());

				if($mdpEncodeD3Compte!=$D3Compte->getPassword()) // mot de passe pas bon 
				{
					$erreur="Compte Diablo 3 mauvais mot de passe !!";
					return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
					'form' => $form->createView(),
					'erreur' => $erreur				
					));
				}
				else // mot de passe bon 
				{
					$HdvCompte = $this->container->get('security.context')->getToken()->getUser();
					$HdvCompteHdvJeuxCorrespondance = $this->getDoctrine()->getEntityManager()->getRepository('D3hdvHdvBundle:HdvCompte')->findBy(array('diablo3Compte' => $D3Compte));
					if(!empty($HdvCompteHdvJeuxCorrespondance))
					{
						$erreur="Ce compte Diablo 3 est déja associé à ce compte HDV !!";
						return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
						'form' => $form->createView(),
						'erreur' => $erreur				
						));
					}
					else
					{
						if( is_null($HdvCompte->getDiablo3Compte()) )
						{
						$HdvCompte->setDiablo3Compte($D3Compte);

						$em->persist($HdvCompte);
						$em->flush();

						$succes="Association du Compte Diablo 3 ".$D3Compte->getUsername()." au Compte Hotel des ventes ".$HdvCompte->getLogin()."  réussi";
						return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:index.html.twig', array(
						'succes' => $succes				
						));
						}
						else
						{
							$erreur="Un compte Diablo 3 est déja associé à votre compte HDV !! Détachez le compte Diablo 3 actuel et réessayez !!";
							return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
							'form' => $form->createView(),
							'erreur' => $erreur				
							));
							}
						
					}
				}
			}
		}
		else
		{
			$erreur="Compte Diablo 3 inéxistant";
			return $this->container->get('templating')->renderResponse('D3hdvHdvBundle:Hdv:logindiablo3.html.twig', array(
			'form' => $form->createView(),
			'erreur' => $erreur				
			));
		}


	}
  }



}
